package com.lsy.poi.cell.extractor;

import org.apache.poi.xssf.usermodel.XSSFCell;

import com.lsy.poi.exception.cell.ExtractorException;

/**
 * 可以根据 CellType，自适应 的 提取
 *
 */
public class AdaptableCellExtractor extends CellExtractor {

	
	@SuppressWarnings("deprecation")
	@Override
	public Object doExtract(XSSFCell cell) throws ExtractorException {
		
		if(cell == null) return null;
		
		try {
			switch (cell.getCellTypeEnum()) {
				case STRING:
					return cell.getStringCellValue();
					
				case NUMERIC:
					/* 日期类型 的 单元格 也满足 CellType==NUMERIC
					 * 官方文档：Numeric cell type (whole numbers, fractional numbers, dates)
					 * 
					 * 但是我们这里 仍旧用 getNumericCellValue() 来 提取，而不是  getDateCellValue()
					 */
					double d = cell.getNumericCellValue();
					
					if(d % 1 == 0){ //double 变量为 int 类型
						return (int) d;
					}else {
						return d;
					}
					
				case BOOLEAN:
					return cell.getBooleanCellValue();
					
				case FORMULA: // 公式
					return cell.getCellFormula();
					
				case ERROR:
					/* return cell.getErrorCellValue(); */
					return cell.getErrorCellString();
					
				case BLANK: // 空值
					return "";
					
				default:
					return cell.getStringCellValue();
			}
		} catch (IllegalStateException e) {
			throw new ExtractorException(cell, "按 自适应 类型");
		}

	}
}
